// 首先需要添加导入语句
import { fetchEventSource } from '@microsoft/fetch-event-source';
import store from 'store'

const url =  `${import.meta.env.VITE_APP_API_BASE_URL}/app-api/ai/blapi/completionstream`;

// 替换现有的 callDashScope 函数
async function callDashScope(prompt = "", onMessage = (text: string) => {}, signal?: AbortSignal, options?: any) {

    const requestBody = {
        prompt,
        incrementalOutput: true,
        options: options || {}
    };

    try {
        const token = store.get('token');

        await fetchEventSource(url, {
            method: 'POST',
            headers: {
                'Authorization': `Bearer ${token}`,
                'Content-Type': 'application/json',
            },
            body: JSON.stringify(requestBody),
            signal,
            onmessage(event) {
                // 处理每个 SSE 消息
                // console.log(`收到消息: ${event.data}`);
                
                if (event.data === '[DONE]') {
                    console.log('流式响应完成');
                    return;
                }
                
                try {
                    // 解析JSON数据
                    const jsonData = JSON.parse(event.data);
                    // 根据 DashScope API 的实际返回结构提取内容
                    // 这里需要根据实际返回格式调整
                    const content = jsonData.data?.text || jsonData.text || '';
                    
                    if (content) {
                        onMessage(content);
                    }
                } catch (error) {
                    // 如果解析失败，可能是非JSON格式的数据
                    console.log('无法解析为JSON:', event.data);
                    onMessage(event.data);
                }
            },
            onclose() {
                console.log('连接已关闭');
            },
            onerror(err) {
                console.error('连接错误:', err);
                throw err; // 重新抛出错误以便外部捕获
            }
        });
    } catch (error) {
        // 处理AbortError情况
        if (error.name === 'AbortError') {
            console.log('请求被中断');
            throw new Error('canceled');
        }
        console.error(`调用 DashScope 出错: ${error.message}`);
        throw error;
    }
}

export default callDashScope;